package plugins; import java.util.Set; import play.Application; import play.Configuration; import play.Logger; import play.Logger.ALogger; import play.api.Plugin; import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.Region; public class S3Plugin implements Plugin { private static ALogger log = Logger.of(S3Plugin.class); public static final String AWS_S3_BUCKET = "aws.s3.bucket"; public static final String AWS_ACCESS_KEY = "aws.access.key"; public static final String AWS_SECRET_KEY = "aws.secret.key"; private final Application application; private static String bucket; public static AmazonS3 amazonS3; public S3Plugin(Application application) { this.application = application; } @Override public void onStart() { if (log.isDebugEnabled()) log.debug("onStart <-"); Configuration conf = application.configuration(); String accessKey = conf.getString(AWS_ACCESS_KEY); String secretKey = conf.getString(AWS_SECRET_KEY); String s3Bucket = conf.getString(AWS_S3_BUCKET); if (log.isDebugEnabled()) log.debug("accessKey : " + accessKey); if (log.isDebugEnabled()) log.debug("s3Bucket : " + s3Bucket); bucket = s3Bucket; if ((accessKey != null) && (secretKey != null)) { AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); ClientConfiguration config = new ClientConfiguration(); String proxyHost = System.getProperty("http.proxyHost"); String proxyPort = System.getProperty("http.proxyPort"); if (proxyHost != null && proxyPort != null) { config.setProxyHost(proxyHost); config.setProxyPort(Integer.valueOf(proxyPort)); } if (amazonS3 == null) amazonS3 = new AmazonS3Client(credentials, config); if (amazonS3.doesBucketExist(s3Bucket)) { if (log.isDebugEnabled()) log.debug("bucket exists: " + s3Bucket); } else { log.debug("bucket does not exist: " + s3Bucket); amazonS3.createBucket(s3Bucket, Region.EU_Ireland); log.debug("bucket created: " + s3Bucket); } log.info("Using S3 Bucket: " + s3Bucket); } } @Override public boolean enabled() { if (log.isDebugEnabled()) log.debug("enabled() <-"); Set<String> keys = application.configuration().keys(); boolean result = keys.contains(AWS_ACCESS_KEY) && keys.contains(AWS_SECRET_KEY) && keys .contains(AWS_S3_BUCKET); if (log.isDebugEnabled()) log.debug("enabled : " + result); return result; } @Override public void onStop() { amazonS3 = null; } public static String getBucket() { return bucket; } }